
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Python Dependency Visualization</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #1a2a6c, #b21f1f, #1a2a6c);
            color: #fff;
            min-height: 100vh;
            padding: 20px;
        }
        
        .container {
            max-width: 1400px;
            margin: 0 auto;
            background-color: rgba(0, 0, 0, 0.7);
            border-radius: 15px;
            padding: 25px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
        }
        
        header {
            text-align: center;
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 2px solid #4a90e2;
        }
        
        h1 {
            font-size: 2.5rem;
            margin: 0 0 10px;
            color: #4a90e2;
            text-shadow: 0 0 10px rgba(74, 144, 226, 0.7);
        }
        
        .subtitle {
            font-size: 1.2rem;
            color: #aaa;
            margin-bottom: 20px;
        }
        
        .dashboard {
            display: flex;
            gap: 20px;
            margin-bottom: 30px;
        }
        
        .panel {
            background: rgba(30, 30, 50, 0.8);
            border-radius: 10px;
            padding: 20px;
            flex: 1;
            height: 800px;
            display: flex;
            flex-direction: column;
        }
        
        .panel-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 15px;
            padding-bottom: 10px;
            border-bottom: 1px solid #4a90e2;
        }
        
        .panel-title {
            font-size: 1.5rem;
            color: #4a90e2;
        }
        
        .controls {
            display: flex;
            gap: 10px;
        }
        
        button {
            background: linear-gradient(to right, #4a90e2, #63b3ed);
            color: white;
            border: none;
            padding: 8px 15px;
            border-radius: 50px;
            cursor: pointer;
            font-size: 0.9rem;
            font-weight: bold;
            transition: all 0.3s ease;
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
        }
        
        button:hover {
            transform: translateY(-3px);
            box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
            background: linear-gradient(to right, #63b3ed, #4a90e2);
        }
        
        .stats {
            display: flex;
            justify-content: space-around;
            background: rgba(30, 30, 50, 0.8);
            border-radius: 10px;
            padding: 15px;
            margin-bottom: 25px;
            flex-wrap: wrap;
        }
        
        .stat-card {
            text-align: center;
            padding: 15px;
            min-width: 150px;
        }
        
        .stat-value {
            font-size: 2.2rem;
            font-weight: bold;
            color: #4a90e2;
            margin: 5px 0;
        }
        
        .stat-label {
            font-size: 1rem;
            color: #aaa;
        }
        
        .tree-view {
            padding-left: 20px;
            overflow-y: auto;
            flex: 1;
        }
        
        .tree-item {
            padding: 5px 0;
            cursor: pointer;
            transition: all 0.2s;
        }
        
        .tree-item:hover {
            background: rgba(255, 255, 255, 0.1);
            border-radius: 5px;
        }
        
        .dir::before {
            content: '📁 ';
        }
        
        .file::before {
            content: '📄 ';
        }
        
        .used {
            color: #2ecc71;
        }
        
        .unused {
            color: #e74c3c;
        }
        
        .entry {
            color: #4a90e2;
            font-weight: bold;
        }
        
        .node-container {
            display: flex;
            flex-wrap: wrap;
            gap: 15px;
            padding: 10px;
            overflow-y: auto;
            height: 100%;
        }
        
        .node-card {
            background: rgba(74, 144, 226, 0.2);
            border-radius: 8px;
            padding: 15px;
            min-width: 200px;
            cursor: pointer;
            transition: all 0.3s ease;
            border: 1px solid rgba(74, 144, 226, 0.5);
        }
        
        .node-card:hover {
            background: rgba(74, 144, 226, 0.4);
            transform: translateY(-5px);
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
        }
        
        .node-header {
            display: flex;
            align-items: center;
            margin-bottom: 10px;
        }
        
        .node-name {
            font-weight: bold;
            font-size: 1.1rem;
            color: #4a90e2;
        }
        
        .entry-node .node-name {
            color: #4a90e2;
            text-shadow: 0 0 5px rgba(74, 144, 226, 0.7);
        }
        
        .node-path {
            font-size: 0.9rem;
            color: #aaa;
            margin-bottom: 10px;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        
        .dependencies-list {
            margin-top: 10px;
            padding-top: 10px;
            border-top: 1px solid rgba(255, 255, 255, 0.1);
        }
        
        .dependency-item {
            padding: 5px;
            background: rgba(30, 30, 50, 0.5);
            margin-bottom: 5px;
            border-radius: 4px;
            font-size: 0.9rem;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        
        .legend {
            display: flex;
            justify-content: center;
            gap: 30px;
            margin-top: 20px;
            flex-wrap: wrap;
        }
        
        .legend-item {
            display: flex;
            align-items: center;
            gap: 8px;
        }
        
        footer {
            text-align: center;
            margin-top: 30px;
            color: #aaa;
            font-size: 0.9rem;
        }
        
        .file-count {
            font-size: 0.9rem;
            color: #aaa;
            margin-top: 5px;
        }
        
        .message-box {
            position: fixed;
            top: 20px;
            left: 50%;
            transform: translateX(-50%);
            background: rgba(231, 76, 60, 0.9);
            color: white;
            padding: 15px 30px;
            border-radius: 50px;
            font-weight: bold;
            z-index: 1000;
            opacity: 0;
            transition: opacity 0.3s;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
        }
        
        .message-box.show {
            opacity: 1;
        }
        
        .no-nodes {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100%;
            color: #aaa;
            font-size: 1.2rem;
        }
    </style>
</head>
<body>
    <div id="message-box" class="message-box">此文件无依赖文件</div>
    
    <div class="container">
        <header>
            <h1>Python 依赖关系可视化</h1>
            <div class="subtitle">项目: ragflow | 入口文件: api/ragflow_server.py</div>
        </header>
        
        <div class="stats">
            <div class="stat-card">
                <div class="stat-value">120</div>
                <div class="stat-label">已使用文件</div>
            </div>
            <div class="stat-card">
                <div class="stat-value">117</div>
                <div class="stat-label">未使用文件</div>
            </div>
            <div class="stat-card">
                <div class="stat-value">100</div>
                <div class="stat-label">依赖关系</div>
            </div>
            <div class="stat-card">
                <div class="stat-value">237</div>
                <div class="stat-label">总文件数</div>
            </div>
        </div>
        
        <div class="dashboard">
            <div class="panel">
                <div class="panel-header">
                    <div class="panel-title">文件依赖关系</div>
                    <div class="controls">
                        <button id="reset-dep">返回入口文件</button>
                    </div>
                </div>
                <div id="dependency-view" class="node-container">
                    <!-- 依赖节点将由JavaScript动态生成 -->
                </div>
            </div>
            
            <div class="panel">
                <div class="panel-header">
                    <div class="panel-title">项目文件</div>
                    <div class="controls">
                        <button id="show-all-files" class="active">所有文件</button>
                        <button id="show-unused-files">未使用文件</button>
                        <button id="collapse-dir">折叠全部</button>
                    </div>
                </div>
                <div id="directory-tree" class="tree-view">
                    <!-- 目录树将由JavaScript动态生成 -->
                </div>
                <div id="file-count" class="file-count">
                    总文件数: 237 | 未使用文件: 117
                </div>
            </div>
        </div>
        
        <div class="legend">
            <div class="legend-item">
                <span class="entry">入口文件</span>
            </div>
            <div class="legend-item">
                <span class="used">已使用文件</span>
            </div>
            <div class="legend-item">
                <span class="unused">未使用文件</span>
            </div>
        </div>
        
        <footer>
            依赖关系扫描工具 | 使用Python AST解析 | 237个文件, 100个依赖关系
        </footer>
    </div>

    <script>
        // 节点字典数据
        const nodeDict = {
  "deepdoc/parser/resume/entities/corporations.py": {
    "name": "corporations.py",
    "path": "deepdoc/parser/resume/entities/corporations.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/es_conn.py": {
    "name": "es_conn.py",
    "path": "rag/utils/es_conn.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/google.py": {
    "name": "google.py",
    "path": "agent/component/google.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/resume/entities/schools.py": {
    "name": "schools.py",
    "path": "deepdoc/parser/resume/entities/schools.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "intergrations/chatgpt-on-wechat/plugins/ragflow_chat.py": {
    "name": "ragflow_chat.py",
    "path": "intergrations/chatgpt-on-wechat/plugins/ragflow_chat.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/vision/operators.py": {
    "name": "operators.py",
    "path": "deepdoc/vision/operators.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/wencai.py": {
    "name": "wencai.py",
    "path": "agent/component/wencai.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/markdown_parser.py": {
    "name": "markdown_parser.py",
    "path": "deepdoc/parser/markdown_parser.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/resume/__init__.py": {
    "name": "__init__.py",
    "path": "deepdoc/parser/resume/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "rag/raptor.py": {
    "name": "raptor.py",
    "path": "rag/raptor.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "web/node_modules/fmin/test.py": {
    "name": "test.py",
    "path": "web/node_modules/fmin/test.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/entity_embedding.py": {
    "name": "entity_embedding.py",
    "path": "graphrag/general/entity_embedding.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/parser/resume/entities/__init__.py": {
    "name": "__init__.py",
    "path": "deepdoc/parser/resume/entities/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/leiden.py": {
    "name": "leiden.py",
    "path": "graphrag/general/leiden.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/ragflow_sdk/modules/agent.py": {
    "name": "agent.py",
    "path": "sdk/python/ragflow_sdk/modules/agent.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agentic_reasoning/__init__.py": {
    "name": "__init__.py",
    "path": "agentic_reasoning/__init__.py",
    "import_nodes": [
      "agentic_reasoning/deep_research.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/app/picture.py": {
    "name": "picture.py",
    "path": "rag/app/picture.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/llm/cv_model.py": {
    "name": "cv_model.py",
    "path": "rag/llm/cv_model.py",
    "import_nodes": [
      "api/utils/file_utils.py",
      "api/utils/__init__.py",
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/entity_resolution_prompt.py": {
    "name": "entity_resolution_prompt.py",
    "path": "graphrag/entity_resolution_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "main.py": {
    "name": "main.py",
    "path": "main.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/exesql.py": {
    "name": "exesql.py",
    "path": "agent/component/exesql.py",
    "import_nodes": [
      "agent/component/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/app/manual.py": {
    "name": "manual.py",
    "path": "rag/app/manual.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/file2document_service.py": {
    "name": "file2document_service.py",
    "path": "api/db/services/file2document_service.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/db/services/document_service.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/db/services/common_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/utils/web_utils.py": {
    "name": "web_utils.py",
    "path": "api/utils/web_utils.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "api/constants.py": {
    "name": "constants.py",
    "path": "api/constants.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/ppt_parser.py": {
    "name": "ppt_parser.py",
    "path": "deepdoc/parser/ppt_parser.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/tushare.py": {
    "name": "tushare.py",
    "path": "agent/component/tushare.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agentic_reasoning/deep_research.py": {
    "name": "deep_research.py",
    "path": "agentic_reasoning/deep_research.py",
    "import_nodes": [
      "agentic_reasoning/prompts.py",
      "rag/utils/tavily_conn.py",
      "rag/prompts.py",
      "rag/nlp/__init__.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/googlescholar.py": {
    "name": "googlescholar.py",
    "path": "agent/component/googlescholar.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/kb_app.py": {
    "name": "kb_app.py",
    "path": "api/apps/kb_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/query_analyze_prompt.py": {
    "name": "query_analyze_prompt.py",
    "path": "graphrag/query_analyze_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/parser/resume/entities/regions.py": {
    "name": "regions.py",
    "path": "deepdoc/parser/resume/entities/regions.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/utils/t_crypt.py": {
    "name": "t_crypt.py",
    "path": "api/utils/t_crypt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/minio_conn.py": {
    "name": "minio_conn.py",
    "path": "rag/utils/minio_conn.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "web/node_modules/katex/src/metrics/extract_tfms.py": {
    "name": "extract_tfms.py",
    "path": "web/node_modules/katex/src/metrics/extract_tfms.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/duckduckgo.py": {
    "name": "duckduckgo.py",
    "path": "agent/component/duckduckgo.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/ragflow_server.py": {
    "name": "ragflow_server.py",
    "path": "api/ragflow_server.py",
    "import_nodes": [
      "api/utils/log_utils.py",
      "api/utils/__init__.py",
      "api/apps/__init__.py",
      "api/db/services/document_service.py",
      "api/versions.py",
      "api/db/db_models.py",
      "api/db/init_data.py",
      "api/__init__.py",
      "rag/settings.py",
      "api/db/runtime_config.py"
    ],
    "is_entry": true,
    "is_used": true
  },
  "api/db/services/conversation_service.py": {
    "name": "conversation_service.py",
    "path": "api/db/services/conversation_service.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "rag/prompts.py",
      "api/db/services/common_service.py",
      "api/db/services/api_service.py",
      "api/db/services/dialog_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/general/claim_extractor.py": {
    "name": "claim_extractor.py",
    "path": "graphrag/general/claim_extractor.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/begin.py": {
    "name": "begin.py",
    "path": "agent/component/begin.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/base.py": {
    "name": "base.py",
    "path": "agent/component/base.py",
    "import_nodes": [
      "agent/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "web/node_modules/flatted/python/test.py": {
    "name": "test.py",
    "path": "web/node_modules/flatted/python/test.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/test/conftest.py": {
    "name": "conftest.py",
    "path": "sdk/python/test/conftest.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/canvas.py": {
    "name": "canvas.py",
    "path": "agent/canvas.py",
    "import_nodes": [
      "agent/component/__init__.py",
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/benchmark.py": {
    "name": "benchmark.py",
    "path": "rag/benchmark.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/extractor.py": {
    "name": "extractor.py",
    "path": "graphrag/general/extractor.py",
    "import_nodes": [
      "graphrag/general/graph_prompt.py",
      "rag/llm/chat_model.py",
      "rag/utils/__init__.py",
      "graphrag/utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/nlp/synonym.py": {
    "name": "synonym.py",
    "path": "rag/nlp/synonym.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/test/test_sdk_api/t_chunk.py": {
    "name": "t_chunk.py",
    "path": "sdk/python/test/test_sdk_api/t_chunk.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/index.py": {
    "name": "index.py",
    "path": "graphrag/general/index.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/utils/file_utils.py": {
    "name": "file_utils.py",
    "path": "api/utils/file_utils.py",
    "import_nodes": [
      "api/db/__init__.py",
      "api/constants.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/utils/storage_factory.py": {
    "name": "storage_factory.py",
    "path": "rag/utils/storage_factory.py",
    "import_nodes": [
      "rag/utils/azure_sas_conn.py",
      "rag/utils/oss_conn.py",
      "rag/utils/minio_conn.py",
      "rag/utils/azure_spn_conn.py",
      "rag/utils/s3_conn.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/services/user_service.py": {
    "name": "user_service.py",
    "path": "api/db/services/user_service.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/db/services/common_service.py",
      "rag/settings.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/deepl.py": {
    "name": "deepl.py",
    "path": "agent/component/deepl.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/vision/seeit.py": {
    "name": "seeit.py",
    "path": "deepdoc/vision/seeit.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/settings.py": {
    "name": "settings.py",
    "path": "api/settings.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/qa.py": {
    "name": "qa.py",
    "path": "rag/app/qa.py",
    "import_nodes": [
      "deepdoc/parser/utils.py",
      "rag/nlp/__init__.py",
      "deepdoc/parser/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/app/book.py": {
    "name": "book.py",
    "path": "rag/app/book.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/light/smoke.py": {
    "name": "smoke.py",
    "path": "graphrag/light/smoke.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/message.py": {
    "name": "message.py",
    "path": "agent/component/message.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/html_parser.py": {
    "name": "html_parser.py",
    "path": "deepdoc/parser/html_parser.py",
    "import_nodes": [
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/search.py": {
    "name": "search.py",
    "path": "graphrag/search.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/canvas_app.py": {
    "name": "canvas_app.py",
    "path": "api/apps/canvas_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/laws.py": {
    "name": "laws.py",
    "path": "rag/app/laws.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/email.py": {
    "name": "email.py",
    "path": "agent/component/email.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/utils/log_utils.py": {
    "name": "log_utils.py",
    "path": "api/utils/log_utils.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/utils.py": {
    "name": "utils.py",
    "path": "deepdoc/parser/utils.py",
    "import_nodes": [
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/vision/table_structure_recognizer.py": {
    "name": "table_structure_recognizer.py",
    "path": "deepdoc/vision/table_structure_recognizer.py",
    "import_nodes": [
      "deepdoc/vision/recognizer.py",
      "rag/nlp/__init__.py",
      "api/utils/file_utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "intergrations/chatgpt-on-wechat/plugins/__init__.py": {
    "name": "__init__.py",
    "path": "intergrations/chatgpt-on-wechat/plugins/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/email.py": {
    "name": "email.py",
    "path": "rag/app/email.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/mind_map_extractor.py": {
    "name": "mind_map_extractor.py",
    "path": "graphrag/general/mind_map_extractor.py",
    "import_nodes": [
      "graphrag/general/mind_map_prompt.py",
      "rag/utils/__init__.py",
      "rag/llm/chat_model.py",
      "graphrag/utils.py",
      "graphrag/general/extractor.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/txt_parser.py": {
    "name": "txt_parser.py",
    "path": "deepdoc/parser/txt_parser.py",
    "import_nodes": [
      "deepdoc/parser/utils.py",
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/resume/entities/industries.py": {
    "name": "industries.py",
    "path": "deepdoc/parser/resume/entities/industries.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/test/test_sdk_api/t_document.py": {
    "name": "t_document.py",
    "path": "sdk/python/test/test_sdk_api/t_document.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/vision/recognizer.py": {
    "name": "recognizer.py",
    "path": "deepdoc/vision/recognizer.py",
    "import_nodes": [
      "deepdoc/vision/__init__.py",
      "api/utils/file_utils.py",
      "deepdoc/vision/operators.py",
      "deepdoc/vision/ocr.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_sdk_api/t_chat.py": {
    "name": "t_chat.py",
    "path": "sdk/python/test/test_sdk_api/t_chat.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/dialog_app.py": {
    "name": "dialog_app.py",
    "path": "api/apps/dialog_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/parser/resume/step_two.py": {
    "name": "step_two.py",
    "path": "deepdoc/parser/resume/step_two.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/azure_spn_conn.py": {
    "name": "azure_spn_conn.py",
    "path": "rag/utils/azure_spn_conn.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/resume/step_one.py": {
    "name": "step_one.py",
    "path": "deepdoc/parser/resume/step_one.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/baidufanyi.py": {
    "name": "baidufanyi.py",
    "path": "agent/component/baidufanyi.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/github.py": {
    "name": "github.py",
    "path": "agent/component/github.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/jin10.py": {
    "name": "jin10.py",
    "path": "agent/component/jin10.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/conversation_app.py": {
    "name": "conversation_app.py",
    "path": "api/apps/conversation_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/rewrite.py": {
    "name": "rewrite.py",
    "path": "agent/component/rewrite.py",
    "import_nodes": [
      "agent/component/__init__.py",
      "api/db/__init__.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/db_models.py": {
    "name": "db_models.py",
    "path": "api/db/db_models.py",
    "import_nodes": [
      "api/__init__.py",
      "api/db/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/__init__.py": {
    "name": "__init__.py",
    "path": "api/db/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "api/db/services/canvas_service.py": {
    "name": "canvas_service.py",
    "path": "api/db/services/canvas_service.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/db/db_models.py",
      "api/db/services/conversation_service.py",
      "api/db/services/common_service.py",
      "api/db/services/api_service.py",
      "agent/canvas.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/pdf_parser.py": {
    "name": "pdf_parser.py",
    "path": "deepdoc/parser/pdf_parser.py",
    "import_nodes": [
      "api/__init__.py",
      "rag/nlp/__init__.py",
      "deepdoc/vision/__init__.py",
      "api/utils/file_utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/llm/chat_model.py": {
    "name": "chat_model.py",
    "path": "rag/llm/chat_model.py",
    "import_nodes": [
      "rag/svr/jina_server.py",
      "rag/utils/__init__.py",
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/llm/rerank_model.py": {
    "name": "rerank_model.py",
    "path": "rag/llm/rerank_model.py",
    "import_nodes": [
      "api/__init__.py",
      "rag/utils/__init__.py",
      "api/utils/file_utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/qweather.py": {
    "name": "qweather.py",
    "path": "agent/component/qweather.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/nlp/rag_tokenizer.py": {
    "name": "rag_tokenizer.py",
    "path": "rag/nlp/rag_tokenizer.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/template.py": {
    "name": "template.py",
    "path": "agent/component/template.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "web/node_modules/flatted/python/flatted.py": {
    "name": "flatted.py",
    "path": "web/node_modules/flatted/python/flatted.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/presentation.py": {
    "name": "presentation.py",
    "path": "rag/app/presentation.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/ragflow_sdk/modules/chunk.py": {
    "name": "chunk.py",
    "path": "sdk/python/ragflow_sdk/modules/chunk.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/nlp/query.py": {
    "name": "query.py",
    "path": "rag/nlp/query.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/s3_conn.py": {
    "name": "s3_conn.py",
    "path": "rag/utils/s3_conn.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/akshare.py": {
    "name": "akshare.py",
    "path": "agent/component/akshare.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/sdk/chat.py": {
    "name": "chat.py",
    "path": "api/apps/sdk/chat.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/audio.py": {
    "name": "audio.py",
    "path": "rag/app/audio.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/__init__.py": {
    "name": "__init__.py",
    "path": "api/apps/__init__.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/db/services/__init__.py",
      "api/__init__.py",
      "api/utils/api_utils.py",
      "api/constants.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/vision/postprocess.py": {
    "name": "postprocess.py",
    "path": "deepdoc/vision/postprocess.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/arxiv.py": {
    "name": "arxiv.py",
    "path": "agent/component/arxiv.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/app/naive.py": {
    "name": "naive.py",
    "path": "rag/app/naive.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/reload_config_base.py": {
    "name": "reload_config_base.py",
    "path": "api/db/reload_config_base.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/docx_parser.py": {
    "name": "docx_parser.py",
    "path": "deepdoc/parser/docx_parser.py",
    "import_nodes": [
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/general/community_report_prompt.py": {
    "name": "community_report_prompt.py",
    "path": "graphrag/general/community_report_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/__init__.py": {
    "name": "__init__.py",
    "path": "rag/app/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_frontend_api/test_dataset.py": {
    "name": "test_dataset.py",
    "path": "sdk/python/test/test_frontend_api/test_dataset.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/community_reports_extractor.py": {
    "name": "community_reports_extractor.py",
    "path": "graphrag/general/community_reports_extractor.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/utils/commands.py": {
    "name": "commands.py",
    "path": "api/utils/commands.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/__init__.py": {
    "name": "__init__.py",
    "path": "deepdoc/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/llm/embedding_model.py": {
    "name": "embedding_model.py",
    "path": "rag/llm/embedding_model.py",
    "import_nodes": [
      "api/__init__.py",
      "rag/utils/__init__.py",
      "api/utils/file_utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/ragflow.py": {
    "name": "ragflow.py",
    "path": "sdk/python/ragflow_sdk/ragflow.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/vision/t_recognizer.py": {
    "name": "t_recognizer.py",
    "path": "deepdoc/vision/t_recognizer.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/one.py": {
    "name": "one.py",
    "path": "rag/app/one.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agentic_reasoning/prompts.py": {
    "name": "prompts.py",
    "path": "agentic_reasoning/prompts.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_frontend_api/common.py": {
    "name": "common.py",
    "path": "sdk/python/test/test_frontend_api/common.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/test/test_sdk_api/t_agent.py": {
    "name": "t_agent.py",
    "path": "sdk/python/test/test_sdk_api/t_agent.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/parser/resume/entities/degrees.py": {
    "name": "degrees.py",
    "path": "deepdoc/parser/resume/entities/degrees.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/light/__init__.py": {
    "name": "__init__.py",
    "path": "graphrag/light/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/parser/excel_parser.py": {
    "name": "excel_parser.py",
    "path": "deepdoc/parser/excel_parser.py",
    "import_nodes": [
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/app/table.py": {
    "name": "table.py",
    "path": "rag/app/table.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/nlp/search.py": {
    "name": "search.py",
    "path": "rag/nlp/search.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/nlp/__init__.py",
      "rag/settings.py",
      "rag/utils/doc_store_conn.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/db_utils.py": {
    "name": "db_utils.py",
    "path": "api/db/db_utils.py",
    "import_nodes": [
      "api/db/db_models.py",
      "api/utils/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/app/tag.py": {
    "name": "tag.py",
    "path": "rag/app/tag.py",
    "import_nodes": [
      "deepdoc/parser/utils.py",
      "rag/app/qa.py",
      "api/db/services/knowledgebase_service.py",
      "api/__init__.py",
      "rag/nlp/__init__.py",
      "graphrag/utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/nlp/term_weight.py": {
    "name": "term_weight.py",
    "path": "rag/nlp/term_weight.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/answer.py": {
    "name": "answer.py",
    "path": "agent/component/answer.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/services/api_service.py": {
    "name": "api_service.py",
    "path": "api/db/services/api_service.py",
    "import_nodes": [
      "api/db/services/common_service.py",
      "api/db/db_models.py",
      "api/utils/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/general/smoke.py": {
    "name": "smoke.py",
    "path": "graphrag/general/smoke.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/utils/__init__.py": {
    "name": "__init__.py",
    "path": "api/utils/__init__.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/constants.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_frontend_api/get_email.py": {
    "name": "get_email.py",
    "path": "sdk/python/test/test_frontend_api/get_email.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/versions.py": {
    "name": "versions.py",
    "path": "api/versions.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/modules/document.py": {
    "name": "document.py",
    "path": "sdk/python/ragflow_sdk/modules/document.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/knowledgebase_service.py": {
    "name": "knowledgebase_service.py",
    "path": "api/db/services/knowledgebase_service.py",
    "import_nodes": [
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/db/services/common_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/keyword.py": {
    "name": "keyword.py",
    "path": "agent/component/keyword.py",
    "import_nodes": [
      "agent/component/__init__.py",
      "api/db/__init__.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/light/graph_extractor.py": {
    "name": "graph_extractor.py",
    "path": "graphrag/light/graph_extractor.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/ragflow_sdk/modules/base.py": {
    "name": "base.py",
    "path": "sdk/python/ragflow_sdk/modules/base.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/__init__.py": {
    "name": "__init__.py",
    "path": "agent/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "rag/svr/cache_file_svr.py": {
    "name": "cache_file_svr.py",
    "path": "rag/svr/cache_file_svr.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/test/test_sdk_api/t_dataset.py": {
    "name": "t_dataset.py",
    "path": "sdk/python/test/test_sdk_api/t_dataset.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/relevant.py": {
    "name": "relevant.py",
    "path": "agent/component/relevant.py",
    "import_nodes": [
      "agent/component/__init__.py",
      "api/db/__init__.py",
      "rag/utils/__init__.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/retrieval.py": {
    "name": "retrieval.py",
    "path": "agent/component/retrieval.py",
    "import_nodes": [
      "api/db/__init__.py",
      "api/db/services/knowledgebase_service.py",
      "api/__init__.py",
      "agent/component/base.py",
      "api/db/services/llm_service.py",
      "rag/app/tag.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/categorize.py": {
    "name": "categorize.py",
    "path": "agent/component/categorize.py",
    "import_nodes": [
      "agent/component/__init__.py",
      "api/db/__init__.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/wikipedia.py": {
    "name": "wikipedia.py",
    "path": "agent/component/wikipedia.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/sdk/agent.py": {
    "name": "agent.py",
    "path": "api/apps/sdk/agent.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/tenant_app.py": {
    "name": "tenant_app.py",
    "path": "api/apps/tenant_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/nlp/surname.py": {
    "name": "surname.py",
    "path": "rag/nlp/surname.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/prompts.py": {
    "name": "prompts.py",
    "path": "rag/prompts.py",
    "import_nodes": [
      "api/utils/file_utils.py",
      "api/db/services/document_service.py",
      "api/db/__init__.py",
      "rag/utils/__init__.py",
      "api/db/services/llm_service.py",
      "rag/settings.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/test/client.py": {
    "name": "client.py",
    "path": "agent/test/client.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/azure_sas_conn.py": {
    "name": "azure_sas_conn.py",
    "path": "rag/utils/azure_sas_conn.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "download_deps.py": {
    "name": "download_deps.py",
    "path": "download_deps.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "web/node_modules/katex/src/metrics/parse_tfm.py": {
    "name": "parse_tfm.py",
    "path": "web/node_modules/katex/src/metrics/parse_tfm.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/vision/layout_recognizer.py": {
    "name": "layout_recognizer.py",
    "path": "deepdoc/vision/layout_recognizer.py",
    "import_nodes": [
      "deepdoc/vision/__init__.py",
      "api/utils/file_utils.py",
      "deepdoc/vision/operators.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/__init__.py": {
    "name": "__init__.py",
    "path": "api/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "example/sdk/dataset_example.py": {
    "name": "dataset_example.py",
    "path": "example/sdk/dataset_example.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/invoke.py": {
    "name": "invoke.py",
    "path": "agent/component/invoke.py",
    "import_nodes": [
      "agent/component/base.py",
      "deepdoc/parser/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/modules/chat.py": {
    "name": "chat.py",
    "path": "sdk/python/ragflow_sdk/modules/chat.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/validation.py": {
    "name": "validation.py",
    "path": "api/validation.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/user_app.py": {
    "name": "user_app.py",
    "path": "api/apps/user_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/vision/ocr.py": {
    "name": "ocr.py",
    "path": "deepdoc/vision/ocr.py",
    "import_nodes": [
      "deepdoc/vision/postprocess.py",
      "deepdoc/vision/__init__.py",
      "api/utils/file_utils.py",
      "deepdoc/vision/operators.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/file2document_app.py": {
    "name": "file2document_app.py",
    "path": "api/apps/file2document_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/llm_app.py": {
    "name": "llm_app.py",
    "path": "api/apps/llm_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/light/graph_prompt.py": {
    "name": "graph_prompt.py",
    "path": "graphrag/light/graph_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/infinity_conn.py": {
    "name": "infinity_conn.py",
    "path": "rag/utils/infinity_conn.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/utils/tavily_conn.py": {
    "name": "tavily_conn.py",
    "path": "rag/utils/tavily_conn.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/generate.py": {
    "name": "generate.py",
    "path": "agent/component/generate.py",
    "import_nodes": [
      "api/db/__init__.py",
      "rag/prompts.py",
      "api/db/services/conversation_service.py",
      "api/__init__.py",
      "agent/component/base.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/utils/oss_conn.py": {
    "name": "oss_conn.py",
    "path": "rag/utils/oss_conn.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/svr/jina_server.py": {
    "name": "jina_server.py",
    "path": "rag/svr/jina_server.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/vision/__init__.py": {
    "name": "__init__.py",
    "path": "deepdoc/vision/__init__.py",
    "import_nodes": [
      "api/utils/file_utils.py",
      "deepdoc/vision/ocr.py",
      "deepdoc/vision/layout_recognizer.py",
      "deepdoc/vision/recognizer.py",
      "deepdoc/vision/table_structure_recognizer.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "web/node_modules/katex/src/metrics/extract_ttfs.py": {
    "name": "extract_ttfs.py",
    "path": "web/node_modules/katex/src/metrics/extract_ttfs.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/crawler.py": {
    "name": "crawler.py",
    "path": "agent/component/crawler.py",
    "import_nodes": [
      "api/utils/web_utils.py",
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/pubmed.py": {
    "name": "pubmed.py",
    "path": "agent/component/pubmed.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/utils.py": {
    "name": "utils.py",
    "path": "graphrag/utils.py",
    "import_nodes": [
      "rag/utils/redis_conn.py",
      "api/__init__.py",
      "rag/nlp/__init__.py",
      "rag/utils/doc_store_conn.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/settings.py": {
    "name": "settings.py",
    "path": "rag/settings.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/utils/file_utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_frontend_api/test_chunk.py": {
    "name": "test_chunk.py",
    "path": "sdk/python/test/test_frontend_api/test_chunk.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/__init__.py": {
    "name": "__init__.py",
    "path": "graphrag/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "web/node_modules/katex/src/fonts/generate_fonts.py": {
    "name": "generate_fonts.py",
    "path": "web/node_modules/katex/src/fonts/generate_fonts.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/document_service.py": {
    "name": "document_service.py",
    "path": "api/db/services/document_service.py",
    "import_nodes": [
      "rag/utils/storage_factory.py",
      "api/db/services/user_service.py",
      "api/db/db_utils.py",
      "api/db/services/common_service.py",
      "api/db/services/api_service.py",
      "api/utils/__init__.py",
      "graphrag/general/mind_map_extractor.py",
      "api/db/services/knowledgebase_service.py",
      "api/db/services/file_service.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/__init__.py",
      "rag/utils/redis_conn.py",
      "api/db/services/dialog_service.py",
      "api/db/services/conversation_service.py",
      "rag/app/__init__.py",
      "rag/nlp/__init__.py",
      "api/db/services/llm_service.py",
      "rag/settings.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/vision/t_ocr.py": {
    "name": "t_ocr.py",
    "path": "deepdoc/vision/t_ocr.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/__init__.py": {
    "name": "__init__.py",
    "path": "api/db/services/__init__.py",
    "import_nodes": [
      "api/db/services/user_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/utils/__init__.py": {
    "name": "__init__.py",
    "path": "rag/utils/__init__.py",
    "import_nodes": [
      "api/utils/file_utils.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/__init__.py": {
    "name": "__init__.py",
    "path": "sdk/python/ragflow_sdk/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/yahoofinance.py": {
    "name": "yahoofinance.py",
    "path": "agent/component/yahoofinance.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_sdk_api/get_email.py": {
    "name": "get_email.py",
    "path": "sdk/python/test/test_sdk_api/get_email.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/svr/task_executor.py": {
    "name": "task_executor.py",
    "path": "rag/svr/task_executor.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/entity_resolution.py": {
    "name": "entity_resolution.py",
    "path": "graphrag/entity_resolution.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/claim_prompt.py": {
    "name": "claim_prompt.py",
    "path": "graphrag/general/claim_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/iteration.py": {
    "name": "iteration.py",
    "path": "agent/component/iteration.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/services/common_service.py": {
    "name": "common_service.py",
    "path": "api/db/services/common_service.py",
    "import_nodes": [
      "api/db/db_models.py",
      "api/utils/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/llm/tts_model.py": {
    "name": "tts_model.py",
    "path": "rag/llm/tts_model.py",
    "import_nodes": [
      "rag/utils/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/chunk_app.py": {
    "name": "chunk_app.py",
    "path": "api/apps/chunk_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "graphrag/general/mind_map_prompt.py": {
    "name": "mind_map_prompt.py",
    "path": "graphrag/general/mind_map_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "rag/utils/doc_store_conn.py": {
    "name": "doc_store_conn.py",
    "path": "rag/utils/doc_store_conn.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/general/graph_prompt.py": {
    "name": "graph_prompt.py",
    "path": "graphrag/general/graph_prompt.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "deepdoc/parser/json_parser.py": {
    "name": "json_parser.py",
    "path": "deepdoc/parser/json_parser.py",
    "import_nodes": [
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/system_app.py": {
    "name": "system_app.py",
    "path": "api/apps/system_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/concentrator.py": {
    "name": "concentrator.py",
    "path": "agent/component/concentrator.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/modules/__init__.py": {
    "name": "__init__.py",
    "path": "sdk/python/ragflow_sdk/modules/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/task_service.py": {
    "name": "task_service.py",
    "path": "api/db/services/task_service.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/resume.py": {
    "name": "resume.py",
    "path": "rag/app/resume.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/nlp/__init__.py",
      "api/db/services/knowledgebase_service.py",
      "deepdoc/parser/resume/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/sdk/session.py": {
    "name": "session.py",
    "path": "api/apps/sdk/session.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/svr/discord_svr.py": {
    "name": "discord_svr.py",
    "path": "rag/svr/discord_svr.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/hello_ragflow.py": {
    "name": "hello_ragflow.py",
    "path": "sdk/python/hello_ragflow.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/file_service.py": {
    "name": "file_service.py",
    "path": "api/db/services/file_service.py",
    "import_nodes": [
      "api/utils/__init__.py",
      "api/utils/file_utils.py",
      "rag/utils/storage_factory.py",
      "api/db/services/document_service.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/db/services/__init__.py",
      "rag/app/__init__.py",
      "api/db/services/file2document_service.py",
      "api/db/services/common_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/modules/session.py": {
    "name": "session.py",
    "path": "sdk/python/ragflow_sdk/modules/session.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/app/paper.py": {
    "name": "paper.py",
    "path": "rag/app/paper.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/switch.py": {
    "name": "switch.py",
    "path": "agent/component/switch.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/llm/sequence2txt_model.py": {
    "name": "sequence2txt_model.py",
    "path": "rag/llm/sequence2txt_model.py",
    "import_nodes": [
      "rag/utils/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/api_app.py": {
    "name": "api_app.py",
    "path": "api/apps/api_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/__init__.py": {
    "name": "__init__.py",
    "path": "agent/component/__init__.py",
    "import_nodes": [
      "agent/component/google.py",
      "agent/component/deepl.py",
      "agent/component/yahoofinance.py",
      "agent/component/wencai.py",
      "agent/component/message.py",
      "agent/component/iteration.py",
      "agent/component/answer.py",
      "agent/component/email.py",
      "agent/component/concentrator.py",
      "agent/component/keyword.py",
      "agent/component/exesql.py",
      "agent/component/relevant.py",
      "agent/component/switch.py",
      "agent/component/retrieval.py",
      "agent/component/categorize.py",
      "agent/component/wikipedia.py",
      "agent/component/github.py",
      "agent/component/baidufanyi.py",
      "agent/component/jin10.py",
      "agent/component/tushare.py",
      "agent/component/rewrite.py",
      "agent/component/googlescholar.py",
      "agent/component/qweather.py",
      "agent/component/template.py",
      "agent/component/invoke.py",
      "agent/component/iterationitem.py",
      "agent/component/akshare.py",
      "agent/component/duckduckgo.py",
      "agent/component/baidu.py",
      "agent/component/arxiv.py",
      "agent/component/generate.py",
      "agent/component/begin.py",
      "agent/component/crawler.py",
      "agent/component/pubmed.py",
      "agent/component/bing.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/__init__.py": {
    "name": "__init__.py",
    "path": "rag/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/general/__init__.py": {
    "name": "__init__.py",
    "path": "graphrag/general/__init__.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "deepdoc/parser/__init__.py": {
    "name": "__init__.py",
    "path": "deepdoc/parser/__init__.py",
    "import_nodes": [
      "deepdoc/parser/json_parser.py",
      "deepdoc/parser/excel_parser.py",
      "deepdoc/parser/pdf_parser.py",
      "deepdoc/parser/docx_parser.py",
      "deepdoc/parser/txt_parser.py",
      "deepdoc/parser/markdown_parser.py",
      "deepdoc/parser/html_parser.py",
      "deepdoc/parser/ppt_parser.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/settings.py": {
    "name": "settings.py",
    "path": "agent/settings.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/utils/api_utils.py": {
    "name": "api_utils.py",
    "path": "api/utils/api_utils.py",
    "import_nodes": [
      "api/__init__.py",
      "api/db/db_models.py",
      "api/utils/__init__.py",
      "api/constants.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/utils/redis_conn.py": {
    "name": "redis_conn.py",
    "path": "rag/utils/redis_conn.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/document_app.py": {
    "name": "document_app.py",
    "path": "api/apps/document_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/file_app.py": {
    "name": "file_app.py",
    "path": "api/apps/file_app.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "sdk/python/test/test_sdk_api/t_session.py": {
    "name": "t_session.py",
    "path": "sdk/python/test/test_sdk_api/t_session.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/iterationitem.py": {
    "name": "iterationitem.py",
    "path": "agent/component/iterationitem.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/sdk/doc.py": {
    "name": "doc.py",
    "path": "api/apps/sdk/doc.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/services/dialog_service.py": {
    "name": "dialog_service.py",
    "path": "api/db/services/dialog_service.py",
    "import_nodes": [
      "rag/utils/tavily_conn.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "rag/prompts.py",
      "api/db/services/knowledgebase_service.py",
      "rag/nlp/search.py",
      "rag/utils/__init__.py",
      "agentic_reasoning/__init__.py",
      "rag/app/resume.py",
      "api/__init__.py",
      "api/db/services/llm_service.py",
      "rag/app/tag.py",
      "api/db/services/common_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/test/test_sdk_api/common.py": {
    "name": "common.py",
    "path": "sdk/python/test/test_sdk_api/common.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/apps/sdk/dataset.py": {
    "name": "dataset.py",
    "path": "api/apps/sdk/dataset.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "agent/component/baidu.py": {
    "name": "baidu.py",
    "path": "agent/component/baidu.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/apps/sdk/dify_retrieval.py": {
    "name": "dify_retrieval.py",
    "path": "api/apps/sdk/dify_retrieval.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "web/node_modules/katex/src/metrics/format_json.py": {
    "name": "format_json.py",
    "path": "web/node_modules/katex/src/metrics/format_json.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "api/db/init_data.py": {
    "name": "init_data.py",
    "path": "api/db/init_data.py",
    "import_nodes": [
      "api/utils/file_utils.py",
      "api/db/services/document_service.py",
      "api/db/services/user_service.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "api/db/services/__init__.py",
      "api/db/services/knowledgebase_service.py",
      "api/db/services/canvas_service.py",
      "api/__init__.py",
      "api/db/services/llm_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "graphrag/general/graph_extractor.py": {
    "name": "graph_extractor.py",
    "path": "graphrag/general/graph_extractor.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  },
  "rag/llm/__init__.py": {
    "name": "__init__.py",
    "path": "rag/llm/__init__.py",
    "import_nodes": [
      "rag/llm/chat_model.py",
      "rag/llm/rerank_model.py",
      "rag/llm/cv_model.py",
      "rag/llm/embedding_model.py",
      "rag/llm/sequence2txt_model.py",
      "rag/llm/tts_model.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "rag/nlp/__init__.py": {
    "name": "__init__.py",
    "path": "rag/nlp/__init__.py",
    "import_nodes": [
      "rag/utils/__init__.py",
      "rag/nlp/__init__.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/services/llm_service.py": {
    "name": "llm_service.py",
    "path": "api/db/services/llm_service.py",
    "import_nodes": [
      "api/utils/file_utils.py",
      "api/db/services/user_service.py",
      "api/db/__init__.py",
      "api/db/db_models.py",
      "rag/llm/__init__.py",
      "api/db/services/common_service.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "agent/component/bing.py": {
    "name": "bing.py",
    "path": "agent/component/bing.py",
    "import_nodes": [
      "agent/component/base.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "api/db/runtime_config.py": {
    "name": "runtime_config.py",
    "path": "api/db/runtime_config.py",
    "import_nodes": [
      "api/db/reload_config_base.py",
      "api/versions.py"
    ],
    "is_entry": false,
    "is_used": true
  },
  "sdk/python/ragflow_sdk/modules/dataset.py": {
    "name": "dataset.py",
    "path": "sdk/python/ragflow_sdk/modules/dataset.py",
    "import_nodes": [],
    "is_entry": false,
    "is_used": false
  }
};
        
        // 目录树数据
        const allFilesTree = {"deepdoc": {"type": "dir", "children": {"parser": {"type": "dir", "children": {"resume": {"type": "dir", "children": {"entities": {"type": "dir", "children": {"corporations.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/corporations.py", "is_used": false, "is_entry": false}, "schools.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/schools.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/__init__.py", "is_used": false, "is_entry": false}, "regions.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/regions.py", "is_used": false, "is_entry": false}, "industries.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/industries.py", "is_used": false, "is_entry": false}, "degrees.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/degrees.py", "is_used": false, "is_entry": false}}}, "__init__.py": {"type": "file", "full_path": "deepdoc/parser/resume/__init__.py", "is_used": true, "is_entry": false}, "step_two.py": {"type": "file", "full_path": "deepdoc/parser/resume/step_two.py", "is_used": false, "is_entry": false}, "step_one.py": {"type": "file", "full_path": "deepdoc/parser/resume/step_one.py", "is_used": false, "is_entry": false}}}, "markdown_parser.py": {"type": "file", "full_path": "deepdoc/parser/markdown_parser.py", "is_used": true, "is_entry": false}, "ppt_parser.py": {"type": "file", "full_path": "deepdoc/parser/ppt_parser.py", "is_used": true, "is_entry": false}, "html_parser.py": {"type": "file", "full_path": "deepdoc/parser/html_parser.py", "is_used": true, "is_entry": false}, "utils.py": {"type": "file", "full_path": "deepdoc/parser/utils.py", "is_used": true, "is_entry": false}, "txt_parser.py": {"type": "file", "full_path": "deepdoc/parser/txt_parser.py", "is_used": true, "is_entry": false}, "pdf_parser.py": {"type": "file", "full_path": "deepdoc/parser/pdf_parser.py", "is_used": true, "is_entry": false}, "docx_parser.py": {"type": "file", "full_path": "deepdoc/parser/docx_parser.py", "is_used": true, "is_entry": false}, "excel_parser.py": {"type": "file", "full_path": "deepdoc/parser/excel_parser.py", "is_used": true, "is_entry": false}, "json_parser.py": {"type": "file", "full_path": "deepdoc/parser/json_parser.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "deepdoc/parser/__init__.py", "is_used": true, "is_entry": false}}}, "vision": {"type": "dir", "children": {"operators.py": {"type": "file", "full_path": "deepdoc/vision/operators.py", "is_used": true, "is_entry": false}, "seeit.py": {"type": "file", "full_path": "deepdoc/vision/seeit.py", "is_used": false, "is_entry": false}, "table_structure_recognizer.py": {"type": "file", "full_path": "deepdoc/vision/table_structure_recognizer.py", "is_used": true, "is_entry": false}, "recognizer.py": {"type": "file", "full_path": "deepdoc/vision/recognizer.py", "is_used": true, "is_entry": false}, "postprocess.py": {"type": "file", "full_path": "deepdoc/vision/postprocess.py", "is_used": true, "is_entry": false}, "t_recognizer.py": {"type": "file", "full_path": "deepdoc/vision/t_recognizer.py", "is_used": false, "is_entry": false}, "layout_recognizer.py": {"type": "file", "full_path": "deepdoc/vision/layout_recognizer.py", "is_used": true, "is_entry": false}, "ocr.py": {"type": "file", "full_path": "deepdoc/vision/ocr.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "deepdoc/vision/__init__.py", "is_used": true, "is_entry": false}, "t_ocr.py": {"type": "file", "full_path": "deepdoc/vision/t_ocr.py", "is_used": false, "is_entry": false}}}, "__init__.py": {"type": "file", "full_path": "deepdoc/__init__.py", "is_used": false, "is_entry": false}}}, "rag": {"type": "dir", "children": {"utils": {"type": "dir", "children": {"es_conn.py": {"type": "file", "full_path": "rag/utils/es_conn.py", "is_used": false, "is_entry": false}, "minio_conn.py": {"type": "file", "full_path": "rag/utils/minio_conn.py", "is_used": true, "is_entry": false}, "storage_factory.py": {"type": "file", "full_path": "rag/utils/storage_factory.py", "is_used": true, "is_entry": false}, "azure_spn_conn.py": {"type": "file", "full_path": "rag/utils/azure_spn_conn.py", "is_used": true, "is_entry": false}, "s3_conn.py": {"type": "file", "full_path": "rag/utils/s3_conn.py", "is_used": true, "is_entry": false}, "azure_sas_conn.py": {"type": "file", "full_path": "rag/utils/azure_sas_conn.py", "is_used": true, "is_entry": false}, "infinity_conn.py": {"type": "file", "full_path": "rag/utils/infinity_conn.py", "is_used": false, "is_entry": false}, "tavily_conn.py": {"type": "file", "full_path": "rag/utils/tavily_conn.py", "is_used": true, "is_entry": false}, "oss_conn.py": {"type": "file", "full_path": "rag/utils/oss_conn.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "rag/utils/__init__.py", "is_used": true, "is_entry": false}, "doc_store_conn.py": {"type": "file", "full_path": "rag/utils/doc_store_conn.py", "is_used": true, "is_entry": false}, "redis_conn.py": {"type": "file", "full_path": "rag/utils/redis_conn.py", "is_used": true, "is_entry": false}}}, "raptor.py": {"type": "file", "full_path": "rag/raptor.py", "is_used": false, "is_entry": false}, "app": {"type": "dir", "children": {"picture.py": {"type": "file", "full_path": "rag/app/picture.py", "is_used": false, "is_entry": false}, "manual.py": {"type": "file", "full_path": "rag/app/manual.py", "is_used": false, "is_entry": false}, "qa.py": {"type": "file", "full_path": "rag/app/qa.py", "is_used": true, "is_entry": false}, "book.py": {"type": "file", "full_path": "rag/app/book.py", "is_used": false, "is_entry": false}, "laws.py": {"type": "file", "full_path": "rag/app/laws.py", "is_used": false, "is_entry": false}, "email.py": {"type": "file", "full_path": "rag/app/email.py", "is_used": false, "is_entry": false}, "presentation.py": {"type": "file", "full_path": "rag/app/presentation.py", "is_used": false, "is_entry": false}, "audio.py": {"type": "file", "full_path": "rag/app/audio.py", "is_used": false, "is_entry": false}, "naive.py": {"type": "file", "full_path": "rag/app/naive.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "rag/app/__init__.py", "is_used": true, "is_entry": false}, "one.py": {"type": "file", "full_path": "rag/app/one.py", "is_used": false, "is_entry": false}, "table.py": {"type": "file", "full_path": "rag/app/table.py", "is_used": false, "is_entry": false}, "tag.py": {"type": "file", "full_path": "rag/app/tag.py", "is_used": true, "is_entry": false}, "resume.py": {"type": "file", "full_path": "rag/app/resume.py", "is_used": true, "is_entry": false}, "paper.py": {"type": "file", "full_path": "rag/app/paper.py", "is_used": false, "is_entry": false}}}, "llm": {"type": "dir", "children": {"cv_model.py": {"type": "file", "full_path": "rag/llm/cv_model.py", "is_used": true, "is_entry": false}, "chat_model.py": {"type": "file", "full_path": "rag/llm/chat_model.py", "is_used": true, "is_entry": false}, "rerank_model.py": {"type": "file", "full_path": "rag/llm/rerank_model.py", "is_used": true, "is_entry": false}, "embedding_model.py": {"type": "file", "full_path": "rag/llm/embedding_model.py", "is_used": true, "is_entry": false}, "tts_model.py": {"type": "file", "full_path": "rag/llm/tts_model.py", "is_used": true, "is_entry": false}, "sequence2txt_model.py": {"type": "file", "full_path": "rag/llm/sequence2txt_model.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "rag/llm/__init__.py", "is_used": true, "is_entry": false}}}, "benchmark.py": {"type": "file", "full_path": "rag/benchmark.py", "is_used": false, "is_entry": false}, "nlp": {"type": "dir", "children": {"synonym.py": {"type": "file", "full_path": "rag/nlp/synonym.py", "is_used": false, "is_entry": false}, "rag_tokenizer.py": {"type": "file", "full_path": "rag/nlp/rag_tokenizer.py", "is_used": false, "is_entry": false}, "query.py": {"type": "file", "full_path": "rag/nlp/query.py", "is_used": false, "is_entry": false}, "search.py": {"type": "file", "full_path": "rag/nlp/search.py", "is_used": true, "is_entry": false}, "term_weight.py": {"type": "file", "full_path": "rag/nlp/term_weight.py", "is_used": false, "is_entry": false}, "surname.py": {"type": "file", "full_path": "rag/nlp/surname.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "rag/nlp/__init__.py", "is_used": true, "is_entry": false}}}, "svr": {"type": "dir", "children": {"cache_file_svr.py": {"type": "file", "full_path": "rag/svr/cache_file_svr.py", "is_used": false, "is_entry": false}, "jina_server.py": {"type": "file", "full_path": "rag/svr/jina_server.py", "is_used": true, "is_entry": false}, "task_executor.py": {"type": "file", "full_path": "rag/svr/task_executor.py", "is_used": false, "is_entry": false}, "discord_svr.py": {"type": "file", "full_path": "rag/svr/discord_svr.py", "is_used": false, "is_entry": false}}}, "prompts.py": {"type": "file", "full_path": "rag/prompts.py", "is_used": true, "is_entry": false}, "settings.py": {"type": "file", "full_path": "rag/settings.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "rag/__init__.py", "is_used": true, "is_entry": false}}}, "agent": {"type": "dir", "children": {"component": {"type": "dir", "children": {"google.py": {"type": "file", "full_path": "agent/component/google.py", "is_used": true, "is_entry": false}, "wencai.py": {"type": "file", "full_path": "agent/component/wencai.py", "is_used": true, "is_entry": false}, "exesql.py": {"type": "file", "full_path": "agent/component/exesql.py", "is_used": true, "is_entry": false}, "tushare.py": {"type": "file", "full_path": "agent/component/tushare.py", "is_used": true, "is_entry": false}, "googlescholar.py": {"type": "file", "full_path": "agent/component/googlescholar.py", "is_used": true, "is_entry": false}, "duckduckgo.py": {"type": "file", "full_path": "agent/component/duckduckgo.py", "is_used": true, "is_entry": false}, "begin.py": {"type": "file", "full_path": "agent/component/begin.py", "is_used": true, "is_entry": false}, "base.py": {"type": "file", "full_path": "agent/component/base.py", "is_used": true, "is_entry": false}, "deepl.py": {"type": "file", "full_path": "agent/component/deepl.py", "is_used": true, "is_entry": false}, "message.py": {"type": "file", "full_path": "agent/component/message.py", "is_used": true, "is_entry": false}, "email.py": {"type": "file", "full_path": "agent/component/email.py", "is_used": true, "is_entry": false}, "baidufanyi.py": {"type": "file", "full_path": "agent/component/baidufanyi.py", "is_used": true, "is_entry": false}, "github.py": {"type": "file", "full_path": "agent/component/github.py", "is_used": true, "is_entry": false}, "jin10.py": {"type": "file", "full_path": "agent/component/jin10.py", "is_used": true, "is_entry": false}, "rewrite.py": {"type": "file", "full_path": "agent/component/rewrite.py", "is_used": true, "is_entry": false}, "qweather.py": {"type": "file", "full_path": "agent/component/qweather.py", "is_used": true, "is_entry": false}, "template.py": {"type": "file", "full_path": "agent/component/template.py", "is_used": true, "is_entry": false}, "akshare.py": {"type": "file", "full_path": "agent/component/akshare.py", "is_used": true, "is_entry": false}, "arxiv.py": {"type": "file", "full_path": "agent/component/arxiv.py", "is_used": true, "is_entry": false}, "answer.py": {"type": "file", "full_path": "agent/component/answer.py", "is_used": true, "is_entry": false}, "keyword.py": {"type": "file", "full_path": "agent/component/keyword.py", "is_used": true, "is_entry": false}, "relevant.py": {"type": "file", "full_path": "agent/component/relevant.py", "is_used": true, "is_entry": false}, "retrieval.py": {"type": "file", "full_path": "agent/component/retrieval.py", "is_used": true, "is_entry": false}, "categorize.py": {"type": "file", "full_path": "agent/component/categorize.py", "is_used": true, "is_entry": false}, "wikipedia.py": {"type": "file", "full_path": "agent/component/wikipedia.py", "is_used": true, "is_entry": false}, "invoke.py": {"type": "file", "full_path": "agent/component/invoke.py", "is_used": true, "is_entry": false}, "generate.py": {"type": "file", "full_path": "agent/component/generate.py", "is_used": true, "is_entry": false}, "crawler.py": {"type": "file", "full_path": "agent/component/crawler.py", "is_used": true, "is_entry": false}, "pubmed.py": {"type": "file", "full_path": "agent/component/pubmed.py", "is_used": true, "is_entry": false}, "yahoofinance.py": {"type": "file", "full_path": "agent/component/yahoofinance.py", "is_used": true, "is_entry": false}, "iteration.py": {"type": "file", "full_path": "agent/component/iteration.py", "is_used": true, "is_entry": false}, "concentrator.py": {"type": "file", "full_path": "agent/component/concentrator.py", "is_used": true, "is_entry": false}, "switch.py": {"type": "file", "full_path": "agent/component/switch.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "agent/component/__init__.py", "is_used": true, "is_entry": false}, "iterationitem.py": {"type": "file", "full_path": "agent/component/iterationitem.py", "is_used": true, "is_entry": false}, "baidu.py": {"type": "file", "full_path": "agent/component/baidu.py", "is_used": true, "is_entry": false}, "bing.py": {"type": "file", "full_path": "agent/component/bing.py", "is_used": true, "is_entry": false}}}, "canvas.py": {"type": "file", "full_path": "agent/canvas.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "agent/__init__.py", "is_used": true, "is_entry": false}, "test": {"type": "dir", "children": {"client.py": {"type": "file", "full_path": "agent/test/client.py", "is_used": false, "is_entry": false}}}, "settings.py": {"type": "file", "full_path": "agent/settings.py", "is_used": false, "is_entry": false}}}, "intergrations": {"type": "dir", "children": {"chatgpt-on-wechat": {"type": "dir", "children": {"plugins": {"type": "dir", "children": {"ragflow_chat.py": {"type": "file", "full_path": "intergrations/chatgpt-on-wechat/plugins/ragflow_chat.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "intergrations/chatgpt-on-wechat/plugins/__init__.py", "is_used": false, "is_entry": false}}}}}}}, "web": {"type": "dir", "children": {"node_modules": {"type": "dir", "children": {"fmin": {"type": "dir", "children": {"test.py": {"type": "file", "full_path": "web/node_modules/fmin/test.py", "is_used": false, "is_entry": false}}}, "katex": {"type": "dir", "children": {"src": {"type": "dir", "children": {"metrics": {"type": "dir", "children": {"extract_tfms.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/extract_tfms.py", "is_used": false, "is_entry": false}, "parse_tfm.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/parse_tfm.py", "is_used": false, "is_entry": false}, "extract_ttfs.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/extract_ttfs.py", "is_used": false, "is_entry": false}, "format_json.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/format_json.py", "is_used": false, "is_entry": false}}}, "fonts": {"type": "dir", "children": {"generate_fonts.py": {"type": "file", "full_path": "web/node_modules/katex/src/fonts/generate_fonts.py", "is_used": false, "is_entry": false}}}}}}}, "flatted": {"type": "dir", "children": {"python": {"type": "dir", "children": {"test.py": {"type": "file", "full_path": "web/node_modules/flatted/python/test.py", "is_used": false, "is_entry": false}, "flatted.py": {"type": "file", "full_path": "web/node_modules/flatted/python/flatted.py", "is_used": false, "is_entry": false}}}}}}}}}, "graphrag": {"type": "dir", "children": {"general": {"type": "dir", "children": {"entity_embedding.py": {"type": "file", "full_path": "graphrag/general/entity_embedding.py", "is_used": false, "is_entry": false}, "leiden.py": {"type": "file", "full_path": "graphrag/general/leiden.py", "is_used": false, "is_entry": false}, "claim_extractor.py": {"type": "file", "full_path": "graphrag/general/claim_extractor.py", "is_used": false, "is_entry": false}, "extractor.py": {"type": "file", "full_path": "graphrag/general/extractor.py", "is_used": true, "is_entry": false}, "index.py": {"type": "file", "full_path": "graphrag/general/index.py", "is_used": false, "is_entry": false}, "mind_map_extractor.py": {"type": "file", "full_path": "graphrag/general/mind_map_extractor.py", "is_used": true, "is_entry": false}, "community_report_prompt.py": {"type": "file", "full_path": "graphrag/general/community_report_prompt.py", "is_used": false, "is_entry": false}, "community_reports_extractor.py": {"type": "file", "full_path": "graphrag/general/community_reports_extractor.py", "is_used": false, "is_entry": false}, "smoke.py": {"type": "file", "full_path": "graphrag/general/smoke.py", "is_used": false, "is_entry": false}, "claim_prompt.py": {"type": "file", "full_path": "graphrag/general/claim_prompt.py", "is_used": false, "is_entry": false}, "mind_map_prompt.py": {"type": "file", "full_path": "graphrag/general/mind_map_prompt.py", "is_used": true, "is_entry": false}, "graph_prompt.py": {"type": "file", "full_path": "graphrag/general/graph_prompt.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "graphrag/general/__init__.py", "is_used": false, "is_entry": false}, "graph_extractor.py": {"type": "file", "full_path": "graphrag/general/graph_extractor.py", "is_used": false, "is_entry": false}}}, "entity_resolution_prompt.py": {"type": "file", "full_path": "graphrag/entity_resolution_prompt.py", "is_used": false, "is_entry": false}, "query_analyze_prompt.py": {"type": "file", "full_path": "graphrag/query_analyze_prompt.py", "is_used": false, "is_entry": false}, "light": {"type": "dir", "children": {"smoke.py": {"type": "file", "full_path": "graphrag/light/smoke.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "graphrag/light/__init__.py", "is_used": false, "is_entry": false}, "graph_extractor.py": {"type": "file", "full_path": "graphrag/light/graph_extractor.py", "is_used": false, "is_entry": false}, "graph_prompt.py": {"type": "file", "full_path": "graphrag/light/graph_prompt.py", "is_used": false, "is_entry": false}}}, "search.py": {"type": "file", "full_path": "graphrag/search.py", "is_used": false, "is_entry": false}, "utils.py": {"type": "file", "full_path": "graphrag/utils.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "graphrag/__init__.py", "is_used": false, "is_entry": false}, "entity_resolution.py": {"type": "file", "full_path": "graphrag/entity_resolution.py", "is_used": false, "is_entry": false}}}, "sdk": {"type": "dir", "children": {"python": {"type": "dir", "children": {"ragflow_sdk": {"type": "dir", "children": {"modules": {"type": "dir", "children": {"agent.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/agent.py", "is_used": false, "is_entry": false}, "chunk.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/chunk.py", "is_used": false, "is_entry": false}, "document.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/document.py", "is_used": false, "is_entry": false}, "base.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/base.py", "is_used": false, "is_entry": false}, "chat.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/chat.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/__init__.py", "is_used": false, "is_entry": false}, "session.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/session.py", "is_used": false, "is_entry": false}, "dataset.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/dataset.py", "is_used": false, "is_entry": false}}}, "ragflow.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/ragflow.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/__init__.py", "is_used": false, "is_entry": false}}}, "test": {"type": "dir", "children": {"conftest.py": {"type": "file", "full_path": "sdk/python/test/conftest.py", "is_used": false, "is_entry": false}, "test_sdk_api": {"type": "dir", "children": {"t_chunk.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_chunk.py", "is_used": false, "is_entry": false}, "t_document.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_document.py", "is_used": false, "is_entry": false}, "t_chat.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_chat.py", "is_used": false, "is_entry": false}, "t_agent.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_agent.py", "is_used": false, "is_entry": false}, "t_dataset.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_dataset.py", "is_used": false, "is_entry": false}, "get_email.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/get_email.py", "is_used": false, "is_entry": false}, "t_session.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_session.py", "is_used": false, "is_entry": false}, "common.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/common.py", "is_used": false, "is_entry": false}}}, "test_frontend_api": {"type": "dir", "children": {"test_dataset.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/test_dataset.py", "is_used": false, "is_entry": false}, "common.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/common.py", "is_used": false, "is_entry": false}, "get_email.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/get_email.py", "is_used": false, "is_entry": false}, "test_chunk.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/test_chunk.py", "is_used": false, "is_entry": false}}}}}, "hello_ragflow.py": {"type": "file", "full_path": "sdk/python/hello_ragflow.py", "is_used": false, "is_entry": false}}}}}, "agentic_reasoning": {"type": "dir", "children": {"__init__.py": {"type": "file", "full_path": "agentic_reasoning/__init__.py", "is_used": true, "is_entry": false}, "deep_research.py": {"type": "file", "full_path": "agentic_reasoning/deep_research.py", "is_used": true, "is_entry": false}, "prompts.py": {"type": "file", "full_path": "agentic_reasoning/prompts.py", "is_used": true, "is_entry": false}}}, "main.py": {"type": "file", "full_path": "main.py", "is_used": false, "is_entry": false}, "api": {"type": "dir", "children": {"db": {"type": "dir", "children": {"services": {"type": "dir", "children": {"file2document_service.py": {"type": "file", "full_path": "api/db/services/file2document_service.py", "is_used": true, "is_entry": false}, "conversation_service.py": {"type": "file", "full_path": "api/db/services/conversation_service.py", "is_used": true, "is_entry": false}, "user_service.py": {"type": "file", "full_path": "api/db/services/user_service.py", "is_used": true, "is_entry": false}, "canvas_service.py": {"type": "file", "full_path": "api/db/services/canvas_service.py", "is_used": true, "is_entry": false}, "api_service.py": {"type": "file", "full_path": "api/db/services/api_service.py", "is_used": true, "is_entry": false}, "knowledgebase_service.py": {"type": "file", "full_path": "api/db/services/knowledgebase_service.py", "is_used": true, "is_entry": false}, "document_service.py": {"type": "file", "full_path": "api/db/services/document_service.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "api/db/services/__init__.py", "is_used": true, "is_entry": false}, "common_service.py": {"type": "file", "full_path": "api/db/services/common_service.py", "is_used": true, "is_entry": false}, "task_service.py": {"type": "file", "full_path": "api/db/services/task_service.py", "is_used": false, "is_entry": false}, "file_service.py": {"type": "file", "full_path": "api/db/services/file_service.py", "is_used": true, "is_entry": false}, "dialog_service.py": {"type": "file", "full_path": "api/db/services/dialog_service.py", "is_used": true, "is_entry": false}, "llm_service.py": {"type": "file", "full_path": "api/db/services/llm_service.py", "is_used": true, "is_entry": false}}}, "db_models.py": {"type": "file", "full_path": "api/db/db_models.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "api/db/__init__.py", "is_used": true, "is_entry": false}, "reload_config_base.py": {"type": "file", "full_path": "api/db/reload_config_base.py", "is_used": true, "is_entry": false}, "db_utils.py": {"type": "file", "full_path": "api/db/db_utils.py", "is_used": true, "is_entry": false}, "init_data.py": {"type": "file", "full_path": "api/db/init_data.py", "is_used": true, "is_entry": false}, "runtime_config.py": {"type": "file", "full_path": "api/db/runtime_config.py", "is_used": true, "is_entry": false}}}, "utils": {"type": "dir", "children": {"web_utils.py": {"type": "file", "full_path": "api/utils/web_utils.py", "is_used": true, "is_entry": false}, "t_crypt.py": {"type": "file", "full_path": "api/utils/t_crypt.py", "is_used": false, "is_entry": false}, "file_utils.py": {"type": "file", "full_path": "api/utils/file_utils.py", "is_used": true, "is_entry": false}, "log_utils.py": {"type": "file", "full_path": "api/utils/log_utils.py", "is_used": true, "is_entry": false}, "commands.py": {"type": "file", "full_path": "api/utils/commands.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "api/utils/__init__.py", "is_used": true, "is_entry": false}, "api_utils.py": {"type": "file", "full_path": "api/utils/api_utils.py", "is_used": true, "is_entry": false}}}, "constants.py": {"type": "file", "full_path": "api/constants.py", "is_used": true, "is_entry": false}, "apps": {"type": "dir", "children": {"kb_app.py": {"type": "file", "full_path": "api/apps/kb_app.py", "is_used": false, "is_entry": false}, "canvas_app.py": {"type": "file", "full_path": "api/apps/canvas_app.py", "is_used": false, "is_entry": false}, "dialog_app.py": {"type": "file", "full_path": "api/apps/dialog_app.py", "is_used": false, "is_entry": false}, "conversation_app.py": {"type": "file", "full_path": "api/apps/conversation_app.py", "is_used": false, "is_entry": false}, "sdk": {"type": "dir", "children": {"chat.py": {"type": "file", "full_path": "api/apps/sdk/chat.py", "is_used": false, "is_entry": false}, "agent.py": {"type": "file", "full_path": "api/apps/sdk/agent.py", "is_used": false, "is_entry": false}, "session.py": {"type": "file", "full_path": "api/apps/sdk/session.py", "is_used": false, "is_entry": false}, "doc.py": {"type": "file", "full_path": "api/apps/sdk/doc.py", "is_used": false, "is_entry": false}, "dataset.py": {"type": "file", "full_path": "api/apps/sdk/dataset.py", "is_used": false, "is_entry": false}, "dify_retrieval.py": {"type": "file", "full_path": "api/apps/sdk/dify_retrieval.py", "is_used": false, "is_entry": false}}}, "__init__.py": {"type": "file", "full_path": "api/apps/__init__.py", "is_used": true, "is_entry": false}, "tenant_app.py": {"type": "file", "full_path": "api/apps/tenant_app.py", "is_used": false, "is_entry": false}, "user_app.py": {"type": "file", "full_path": "api/apps/user_app.py", "is_used": false, "is_entry": false}, "file2document_app.py": {"type": "file", "full_path": "api/apps/file2document_app.py", "is_used": false, "is_entry": false}, "llm_app.py": {"type": "file", "full_path": "api/apps/llm_app.py", "is_used": false, "is_entry": false}, "chunk_app.py": {"type": "file", "full_path": "api/apps/chunk_app.py", "is_used": false, "is_entry": false}, "system_app.py": {"type": "file", "full_path": "api/apps/system_app.py", "is_used": false, "is_entry": false}, "api_app.py": {"type": "file", "full_path": "api/apps/api_app.py", "is_used": false, "is_entry": false}, "document_app.py": {"type": "file", "full_path": "api/apps/document_app.py", "is_used": false, "is_entry": false}, "file_app.py": {"type": "file", "full_path": "api/apps/file_app.py", "is_used": false, "is_entry": false}}}, "ragflow_server.py": {"type": "file", "full_path": "api/ragflow_server.py", "is_used": true, "is_entry": true}, "settings.py": {"type": "file", "full_path": "api/settings.py", "is_used": false, "is_entry": false}, "versions.py": {"type": "file", "full_path": "api/versions.py", "is_used": true, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "api/__init__.py", "is_used": true, "is_entry": false}, "validation.py": {"type": "file", "full_path": "api/validation.py", "is_used": false, "is_entry": false}}}, "download_deps.py": {"type": "file", "full_path": "download_deps.py", "is_used": false, "is_entry": false}, "example": {"type": "dir", "children": {"sdk": {"type": "dir", "children": {"dataset_example.py": {"type": "file", "full_path": "example/sdk/dataset_example.py", "is_used": false, "is_entry": false}}}}}};
        const unusedFilesTree = {"deepdoc": {"type": "dir", "children": {"parser": {"type": "dir", "children": {"resume": {"type": "dir", "children": {"entities": {"type": "dir", "children": {"corporations.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/corporations.py", "is_used": false, "is_entry": false}, "schools.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/schools.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/__init__.py", "is_used": false, "is_entry": false}, "regions.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/regions.py", "is_used": false, "is_entry": false}, "industries.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/industries.py", "is_used": false, "is_entry": false}, "degrees.py": {"type": "file", "full_path": "deepdoc/parser/resume/entities/degrees.py", "is_used": false, "is_entry": false}}}, "step_two.py": {"type": "file", "full_path": "deepdoc/parser/resume/step_two.py", "is_used": false, "is_entry": false}, "step_one.py": {"type": "file", "full_path": "deepdoc/parser/resume/step_one.py", "is_used": false, "is_entry": false}}}}}, "vision": {"type": "dir", "children": {"seeit.py": {"type": "file", "full_path": "deepdoc/vision/seeit.py", "is_used": false, "is_entry": false}, "t_recognizer.py": {"type": "file", "full_path": "deepdoc/vision/t_recognizer.py", "is_used": false, "is_entry": false}, "t_ocr.py": {"type": "file", "full_path": "deepdoc/vision/t_ocr.py", "is_used": false, "is_entry": false}}}, "__init__.py": {"type": "file", "full_path": "deepdoc/__init__.py", "is_used": false, "is_entry": false}}}, "rag": {"type": "dir", "children": {"utils": {"type": "dir", "children": {"es_conn.py": {"type": "file", "full_path": "rag/utils/es_conn.py", "is_used": false, "is_entry": false}, "infinity_conn.py": {"type": "file", "full_path": "rag/utils/infinity_conn.py", "is_used": false, "is_entry": false}}}, "raptor.py": {"type": "file", "full_path": "rag/raptor.py", "is_used": false, "is_entry": false}, "app": {"type": "dir", "children": {"picture.py": {"type": "file", "full_path": "rag/app/picture.py", "is_used": false, "is_entry": false}, "manual.py": {"type": "file", "full_path": "rag/app/manual.py", "is_used": false, "is_entry": false}, "book.py": {"type": "file", "full_path": "rag/app/book.py", "is_used": false, "is_entry": false}, "laws.py": {"type": "file", "full_path": "rag/app/laws.py", "is_used": false, "is_entry": false}, "email.py": {"type": "file", "full_path": "rag/app/email.py", "is_used": false, "is_entry": false}, "presentation.py": {"type": "file", "full_path": "rag/app/presentation.py", "is_used": false, "is_entry": false}, "audio.py": {"type": "file", "full_path": "rag/app/audio.py", "is_used": false, "is_entry": false}, "naive.py": {"type": "file", "full_path": "rag/app/naive.py", "is_used": false, "is_entry": false}, "one.py": {"type": "file", "full_path": "rag/app/one.py", "is_used": false, "is_entry": false}, "table.py": {"type": "file", "full_path": "rag/app/table.py", "is_used": false, "is_entry": false}, "paper.py": {"type": "file", "full_path": "rag/app/paper.py", "is_used": false, "is_entry": false}}}, "benchmark.py": {"type": "file", "full_path": "rag/benchmark.py", "is_used": false, "is_entry": false}, "nlp": {"type": "dir", "children": {"synonym.py": {"type": "file", "full_path": "rag/nlp/synonym.py", "is_used": false, "is_entry": false}, "rag_tokenizer.py": {"type": "file", "full_path": "rag/nlp/rag_tokenizer.py", "is_used": false, "is_entry": false}, "query.py": {"type": "file", "full_path": "rag/nlp/query.py", "is_used": false, "is_entry": false}, "term_weight.py": {"type": "file", "full_path": "rag/nlp/term_weight.py", "is_used": false, "is_entry": false}, "surname.py": {"type": "file", "full_path": "rag/nlp/surname.py", "is_used": false, "is_entry": false}}}, "svr": {"type": "dir", "children": {"cache_file_svr.py": {"type": "file", "full_path": "rag/svr/cache_file_svr.py", "is_used": false, "is_entry": false}, "task_executor.py": {"type": "file", "full_path": "rag/svr/task_executor.py", "is_used": false, "is_entry": false}, "discord_svr.py": {"type": "file", "full_path": "rag/svr/discord_svr.py", "is_used": false, "is_entry": false}}}}}, "intergrations": {"type": "dir", "children": {"chatgpt-on-wechat": {"type": "dir", "children": {"plugins": {"type": "dir", "children": {"ragflow_chat.py": {"type": "file", "full_path": "intergrations/chatgpt-on-wechat/plugins/ragflow_chat.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "intergrations/chatgpt-on-wechat/plugins/__init__.py", "is_used": false, "is_entry": false}}}}}}}, "web": {"type": "dir", "children": {"node_modules": {"type": "dir", "children": {"fmin": {"type": "dir", "children": {"test.py": {"type": "file", "full_path": "web/node_modules/fmin/test.py", "is_used": false, "is_entry": false}}}, "katex": {"type": "dir", "children": {"src": {"type": "dir", "children": {"metrics": {"type": "dir", "children": {"extract_tfms.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/extract_tfms.py", "is_used": false, "is_entry": false}, "parse_tfm.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/parse_tfm.py", "is_used": false, "is_entry": false}, "extract_ttfs.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/extract_ttfs.py", "is_used": false, "is_entry": false}, "format_json.py": {"type": "file", "full_path": "web/node_modules/katex/src/metrics/format_json.py", "is_used": false, "is_entry": false}}}, "fonts": {"type": "dir", "children": {"generate_fonts.py": {"type": "file", "full_path": "web/node_modules/katex/src/fonts/generate_fonts.py", "is_used": false, "is_entry": false}}}}}}}, "flatted": {"type": "dir", "children": {"python": {"type": "dir", "children": {"test.py": {"type": "file", "full_path": "web/node_modules/flatted/python/test.py", "is_used": false, "is_entry": false}, "flatted.py": {"type": "file", "full_path": "web/node_modules/flatted/python/flatted.py", "is_used": false, "is_entry": false}}}}}}}}}, "graphrag": {"type": "dir", "children": {"general": {"type": "dir", "children": {"entity_embedding.py": {"type": "file", "full_path": "graphrag/general/entity_embedding.py", "is_used": false, "is_entry": false}, "leiden.py": {"type": "file", "full_path": "graphrag/general/leiden.py", "is_used": false, "is_entry": false}, "claim_extractor.py": {"type": "file", "full_path": "graphrag/general/claim_extractor.py", "is_used": false, "is_entry": false}, "index.py": {"type": "file", "full_path": "graphrag/general/index.py", "is_used": false, "is_entry": false}, "community_report_prompt.py": {"type": "file", "full_path": "graphrag/general/community_report_prompt.py", "is_used": false, "is_entry": false}, "community_reports_extractor.py": {"type": "file", "full_path": "graphrag/general/community_reports_extractor.py", "is_used": false, "is_entry": false}, "smoke.py": {"type": "file", "full_path": "graphrag/general/smoke.py", "is_used": false, "is_entry": false}, "claim_prompt.py": {"type": "file", "full_path": "graphrag/general/claim_prompt.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "graphrag/general/__init__.py", "is_used": false, "is_entry": false}, "graph_extractor.py": {"type": "file", "full_path": "graphrag/general/graph_extractor.py", "is_used": false, "is_entry": false}}}, "entity_resolution_prompt.py": {"type": "file", "full_path": "graphrag/entity_resolution_prompt.py", "is_used": false, "is_entry": false}, "query_analyze_prompt.py": {"type": "file", "full_path": "graphrag/query_analyze_prompt.py", "is_used": false, "is_entry": false}, "light": {"type": "dir", "children": {"smoke.py": {"type": "file", "full_path": "graphrag/light/smoke.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "graphrag/light/__init__.py", "is_used": false, "is_entry": false}, "graph_extractor.py": {"type": "file", "full_path": "graphrag/light/graph_extractor.py", "is_used": false, "is_entry": false}, "graph_prompt.py": {"type": "file", "full_path": "graphrag/light/graph_prompt.py", "is_used": false, "is_entry": false}}}, "search.py": {"type": "file", "full_path": "graphrag/search.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "graphrag/__init__.py", "is_used": false, "is_entry": false}, "entity_resolution.py": {"type": "file", "full_path": "graphrag/entity_resolution.py", "is_used": false, "is_entry": false}}}, "sdk": {"type": "dir", "children": {"python": {"type": "dir", "children": {"ragflow_sdk": {"type": "dir", "children": {"modules": {"type": "dir", "children": {"agent.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/agent.py", "is_used": false, "is_entry": false}, "chunk.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/chunk.py", "is_used": false, "is_entry": false}, "document.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/document.py", "is_used": false, "is_entry": false}, "base.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/base.py", "is_used": false, "is_entry": false}, "chat.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/chat.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/__init__.py", "is_used": false, "is_entry": false}, "session.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/session.py", "is_used": false, "is_entry": false}, "dataset.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/modules/dataset.py", "is_used": false, "is_entry": false}}}, "ragflow.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/ragflow.py", "is_used": false, "is_entry": false}, "__init__.py": {"type": "file", "full_path": "sdk/python/ragflow_sdk/__init__.py", "is_used": false, "is_entry": false}}}, "test": {"type": "dir", "children": {"conftest.py": {"type": "file", "full_path": "sdk/python/test/conftest.py", "is_used": false, "is_entry": false}, "test_sdk_api": {"type": "dir", "children": {"t_chunk.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_chunk.py", "is_used": false, "is_entry": false}, "t_document.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_document.py", "is_used": false, "is_entry": false}, "t_chat.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_chat.py", "is_used": false, "is_entry": false}, "t_agent.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_agent.py", "is_used": false, "is_entry": false}, "t_dataset.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_dataset.py", "is_used": false, "is_entry": false}, "get_email.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/get_email.py", "is_used": false, "is_entry": false}, "t_session.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/t_session.py", "is_used": false, "is_entry": false}, "common.py": {"type": "file", "full_path": "sdk/python/test/test_sdk_api/common.py", "is_used": false, "is_entry": false}}}, "test_frontend_api": {"type": "dir", "children": {"test_dataset.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/test_dataset.py", "is_used": false, "is_entry": false}, "common.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/common.py", "is_used": false, "is_entry": false}, "get_email.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/get_email.py", "is_used": false, "is_entry": false}, "test_chunk.py": {"type": "file", "full_path": "sdk/python/test/test_frontend_api/test_chunk.py", "is_used": false, "is_entry": false}}}}}, "hello_ragflow.py": {"type": "file", "full_path": "sdk/python/hello_ragflow.py", "is_used": false, "is_entry": false}}}}}, "main.py": {"type": "file", "full_path": "main.py", "is_used": false, "is_entry": false}, "api": {"type": "dir", "children": {"apps": {"type": "dir", "children": {"kb_app.py": {"type": "file", "full_path": "api/apps/kb_app.py", "is_used": false, "is_entry": false}, "canvas_app.py": {"type": "file", "full_path": "api/apps/canvas_app.py", "is_used": false, "is_entry": false}, "dialog_app.py": {"type": "file", "full_path": "api/apps/dialog_app.py", "is_used": false, "is_entry": false}, "conversation_app.py": {"type": "file", "full_path": "api/apps/conversation_app.py", "is_used": false, "is_entry": false}, "sdk": {"type": "dir", "children": {"chat.py": {"type": "file", "full_path": "api/apps/sdk/chat.py", "is_used": false, "is_entry": false}, "agent.py": {"type": "file", "full_path": "api/apps/sdk/agent.py", "is_used": false, "is_entry": false}, "session.py": {"type": "file", "full_path": "api/apps/sdk/session.py", "is_used": false, "is_entry": false}, "doc.py": {"type": "file", "full_path": "api/apps/sdk/doc.py", "is_used": false, "is_entry": false}, "dataset.py": {"type": "file", "full_path": "api/apps/sdk/dataset.py", "is_used": false, "is_entry": false}, "dify_retrieval.py": {"type": "file", "full_path": "api/apps/sdk/dify_retrieval.py", "is_used": false, "is_entry": false}}}, "tenant_app.py": {"type": "file", "full_path": "api/apps/tenant_app.py", "is_used": false, "is_entry": false}, "user_app.py": {"type": "file", "full_path": "api/apps/user_app.py", "is_used": false, "is_entry": false}, "file2document_app.py": {"type": "file", "full_path": "api/apps/file2document_app.py", "is_used": false, "is_entry": false}, "llm_app.py": {"type": "file", "full_path": "api/apps/llm_app.py", "is_used": false, "is_entry": false}, "chunk_app.py": {"type": "file", "full_path": "api/apps/chunk_app.py", "is_used": false, "is_entry": false}, "system_app.py": {"type": "file", "full_path": "api/apps/system_app.py", "is_used": false, "is_entry": false}, "api_app.py": {"type": "file", "full_path": "api/apps/api_app.py", "is_used": false, "is_entry": false}, "document_app.py": {"type": "file", "full_path": "api/apps/document_app.py", "is_used": false, "is_entry": false}, "file_app.py": {"type": "file", "full_path": "api/apps/file_app.py", "is_used": false, "is_entry": false}}}, "utils": {"type": "dir", "children": {"t_crypt.py": {"type": "file", "full_path": "api/utils/t_crypt.py", "is_used": false, "is_entry": false}, "commands.py": {"type": "file", "full_path": "api/utils/commands.py", "is_used": false, "is_entry": false}}}, "settings.py": {"type": "file", "full_path": "api/settings.py", "is_used": false, "is_entry": false}, "validation.py": {"type": "file", "full_path": "api/validation.py", "is_used": false, "is_entry": false}, "db": {"type": "dir", "children": {"services": {"type": "dir", "children": {"task_service.py": {"type": "file", "full_path": "api/db/services/task_service.py", "is_used": false, "is_entry": false}}}}}}}, "agent": {"type": "dir", "children": {"test": {"type": "dir", "children": {"client.py": {"type": "file", "full_path": "agent/test/client.py", "is_used": false, "is_entry": false}}}, "settings.py": {"type": "file", "full_path": "agent/settings.py", "is_used": false, "is_entry": false}}}, "download_deps.py": {"type": "file", "full_path": "download_deps.py", "is_used": false, "is_entry": false}, "example": {"type": "dir", "children": {"sdk": {"type": "dir", "children": {"dataset_example.py": {"type": "file", "full_path": "example/sdk/dataset_example.py", "is_used": false, "is_entry": false}}}}}};
        
        // 当前状态
        let currentFileView = "all"; // "all" 或 "unused"
        let currentDependencies = [];
        const entryFilePath = "api/ragflow_server.py";
        
        // 查找入口文件节点
        let entryNode = null;
        for (const key in nodeDict) {
            if (nodeDict[key].path === entryFilePath) {
                entryNode = nodeDict[key];
                break;
            }
        }
        
        // 显示消息
        function showMessage(message) {
            const msgBox = document.getElementById('message-box');
            msgBox.textContent = message;
            msgBox.classList.add('show');
            
            setTimeout(() => {
                msgBox.classList.remove('show');
            }, 2000);
        }
        
        // 渲染依赖视图
        function renderDependencyView(nodes) {
            const container = document.getElementById('dependency-view');
            container.innerHTML = '';
            
            if (!nodes || nodes.length === 0) {
                container.innerHTML = '<div class="no-nodes">当前没有显示任何依赖节点</div>';
                return;
            }
            
            nodes.forEach(node => {
                const isEntry = node.path === entryFilePath;
                
                const card = document.createElement('div');
                card.className = `node-card ${isEntry ? 'entry-node' : ''}`;
                card.innerHTML = `
                    <div class="node-header">
                        <div class="node-name">${node.name}</div>
                    </div>
                    <div class="node-path" title="${node.path}">${node.path}</div>
                    ${node.import_nodes.length > 0 ? `
                        <div class="dependencies-title">依赖文件:</div>
                        <div class="dependencies-list">
                            ${node.import_nodes.map(dep => 
                                `<div class="dependency-item" title="${dep}">${dep.split('/').pop()}</div>`
                            ).join('')}
                        </div>
                    ` : ''}
                `;
                
                // 点击事件
                card.addEventListener('click', function(e) {
                    if (e.target.classList.contains('dependency-item')) return;
                    
                    // 查找完整节点
                    let fullNode = null;
                    for (const key in nodeDict) {
                        if (nodeDict[key].path === node.path) {
                            fullNode = nodeDict[key];
                            break;
                        }
                    }
                    
                    if (!fullNode) return;
                    
                    // 获取依赖节点
                    const dependencyPaths = fullNode.import_nodes;
                    
                    if (dependencyPaths.length > 0) {
                        // 查找依赖节点对象
                        const dependencies = [];
                        for (const path of dependencyPaths) {
                            if (nodeDict[path]) {
                                dependencies.push(nodeDict[path]);
                            }
                        }
                        
                        // 显示依赖节点
                        currentDependencies = dependencies;
                        renderDependencyView(dependencies);
                    } else {
                        showMessage("此文件无依赖文件");
                    }
                });
                
                container.appendChild(card);
            });
        }
        
        // 渲染目录树
        function renderDirectoryTree(data, container, level = 0) {
            const keys = Object.keys(data).sort((a, b) => {
                // 目录在前，文件在后
                if (data[a].type === 'dir' && data[b].type !== 'dir') return -1;
                if (data[a].type !== 'dir' && data[b].type === 'dir') return 1;
                return a.localeCompare(b);
            });
            
            keys.forEach(key => {
                const item = data[key];
                const itemElement = document.createElement('div');
                itemElement.className = 'tree-item';
                itemElement.style.paddingLeft = level * 15 + 'px';
                
                if (item.type === 'dir') {
                    itemElement.classList.add('dir');
                    itemElement.textContent = key;
                    
                    // 添加点击事件展开/折叠
                    itemElement.addEventListener('click', function(e) {
                        e.stopPropagation();
                        const childrenContainer = this.nextElementSibling;
                        if (childrenContainer.style.display === 'none') {
                            childrenContainer.style.display = 'block';
                        } else {
                            childrenContainer.style.display = 'none';
                        }
                    });
                    
                    const childrenContainer = document.createElement('div');
                    childrenContainer.className = 'tree-view';
                    childrenContainer.style.display = 'block'; // 默认展开
                    renderDirectoryTree(item.children, childrenContainer, level + 1);
                    
                    container.appendChild(itemElement);
                    container.appendChild(childrenContainer);
                } else {
                    // 文件
                    itemElement.classList.add('file');
                    if (item.is_used) {
                        itemElement.classList.add('used');
                    } else {
                        itemElement.classList.add('unused');
                    }
                    if (item.is_entry) {
                        itemElement.classList.add('entry');
                    }
                    
                    itemElement.textContent = key;
                    itemElement.title = item.full_path;
                    container.appendChild(itemElement);
                }
            });
        }
        
        // 折叠所有目录
        function collapseAllDirectories() {
            const containers = document.querySelectorAll('#directory-tree .tree-view');
            containers.forEach(container => {
                    container.style.display = 'none';
            });
        }
        
        // 显示所有文件
        function showAllFiles() {
            document.getElementById('show-all-files').classList.add('active');
            document.getElementById('show-unused-files').classList.remove('active');
            currentFileView = "all";
            
            const dirContainer = document.getElementById('directory-tree');
            dirContainer.innerHTML = '';
            renderDirectoryTree(allFilesTree, dirContainer);
        }
        
        // 显示未使用文件
        function showUnusedFiles() {
            document.getElementById('show-all-files').classList.remove('active');
            document.getElementById('show-unused-files').classList.add('active');
            currentFileView = "unused";
            
            const dirContainer = document.getElementById('directory-tree');
            dirContainer.innerHTML = '';
            renderDirectoryTree(unusedFilesTree, dirContainer);
        }
        
        // 初始化渲染
        function initRender() {
            // 初始显示入口文件
            if (entryNode) {
                currentDependencies = [entryNode];
                renderDependencyView([entryNode]);
            } else {
                const container = document.getElementById('dependency-view');
                container.innerHTML = '<div class="no-nodes">未找到入口文件节点</div>';
            }
            
            // 渲染目录树（初始显示所有文件）
            const dirContainer = document.getElementById('directory-tree');
            dirContainer.innerHTML = '';
            renderDirectoryTree(allFilesTree, dirContainer);
        }
        
        // 重置依赖视图
        document.getElementById('reset-dep').addEventListener('click', function() {
            if (entryNode) {
                currentDependencies = [entryNode];
                renderDependencyView([entryNode]);
            } else {
                showMessage("未找到入口文件");
            }
        });
        
        // 显示所有文件
        document.getElementById('show-all-files').addEventListener('click', showAllFiles);
        
        // 显示未使用文件
        document.getElementById('show-unused-files').addEventListener('click', showUnusedFiles);
        
        // 折叠全部目录
        document.getElementById('collapse-dir').addEventListener('click', collapseAllDirectories);
        
        // 初始渲染
        initRender();
    </script>
</body>
</html>
        